home *** CD-ROM | disk | FTP | other *** search
-
- .include doscall.mac
- .include fefunc.h
- .include fdef.h
-
-
- .text
- .even
-
- .dc.l ret
- .dc.l ret
- .dc.l ret
- .dc.l ret
- .dc.l ret
- .dc.l ret
- .dc.l ret
- .dc.l ret
- .dc.l ptr_token
- .dc.l ptr_param
- .dc.l ptr_exec
- .dc.l 0,0,0,0,0
-
- ret:
- rts
- ptr_token:
- .dc.b 'drvctrl',0
- .dc.b 'chgdir',0
- .dc.b 'curdir',0
- .dc.b 'filesnum',0
- .dc.b 'files',0
- .dc.b 'getenv',0
- .dc.b 'setenv',0
- .dc.b '_system',0
- .dc.b 0
- .even
- ptr_param:
- .dc.l p_drvctrl
- .dc.l p_chgdir
- .dc.l p_curdir
- .dc.l p_filesnum
- .dc.l p_files
- .dc.l p_getenv
- .dc.l p_setenv
- .dc.l p_system
- ptr_exec:
- .dc.l e_drvctrl
- .dc.l e_chgdir
- .dc.l e_curdir
- .dc.l e_filesnum
- .dc.l e_files
- .dc.l e_getenv
- .dc.l e_setenv
- .dc.l e_system
-
-
- ** ** ** ** ** ** ** ** ** **
-
- p_drvctrl:
- .dc.w int_val
- .dc.w str_omt
- .dc.w int_ret
- e_drvctrl:
- move.w par1+8(sp),d1 * COM
- bmi curdrv
-
- moveq #0,d0 * DRVNAME get
- tst.w par2(sp)
- bmi @f
- movea.l par2+6(sp),a0
- move.b (a0)+,d0
- beq drvname_err
- ori.b #$20,d0
- subi.b #'a'-1,d0
- bcs drvname_err
- cmpi.b #26,d0
- bhi drvname_err
- cmpi.b #':',(a0)
- bne drvname_err
- @@:
- * d0 = 0(カレント), 1(A:), 2(B:), ...
-
-
- cmpi.w #6,d1
- beq chgdrv
- bhi media_byte
- move.w d0,-(sp) * drive name
- move.b d1,(sp) * command
- DOS _DRVCTRL
- addq.l #2,sp
- bra return_d0
-
- media_byte:
- lea.l -96(sp),sp
- move.l sp,-(sp)
- move.w d0,-(sp)
- DOS _GETDPB
- addq.l #6,sp
- moveq #0,d0
- move.b $16(sp),d0 * media byte
- lea.l 96(sp),sp
- bra return_d0
-
- curdrv:
- DOS _CURDRV
- bra return_d0
- chgdrv:
- subq.w #1,d0
- bcs no_drvname
- move.w d0,-(sp)
- DOS _CHGDRV
- addq.l #2,sp
- tst.l d0
- bge return_zero
- bra no_drvname
-
-
- p_chgdir:
- .dc.w str_val
- .dc.w void_ret
- e_chgdir:
- move.l par1+6(sp),-(sp)
- DOS _CHDIR
- addq.l #4,sp
- tst.l d0
- beq return_d0
- lea.l _cant_chgdir(pc),a1
- rts
-
- p_curdir:
- .dc.w str_omt
- .dc.w str_ret
- e_curdir:
- tst.w par1(sp)
- bmi cur_drive
- movea.l par1+6(sp),a0
- move.b (a0)+,d2
- beq drvname_err
- ori.b #$20,d2
- subi.b #'a'-1,d2
- bcs drvname_err
- cmpi.b #26,d2
- bhi drvname_err
- cmpi.b #':',(a0)
- beq @f
- bra drvname_err
-
- cur_drive:
- DOS _CURDRV
- addq.w #1,d0
- move.w d0,d2
- @@:
- lea.l -$100(sp),sp
- move.l sp,-(sp)
- move.w d2,-(sp) * drive 番号
- DOS _CURDIR * H8/12/10 今まで気付かなかったとは……情けない
- addq.l #6,sp
- tst.l d0
- bmi curdir_err
-
- lea.l strbuf(pc),a1
- addi.w #'A'-1,d2
- move.b d2,(a1)+
- move.b #':',(a1)+
- move.b #'\',(a1)+
-
- movea.l sp,a0
- @@:
- move.b (a0)+,(a1)+
- bne @b
-
- lea.l $100(sp),sp
- lea.l strbuf(pc),a1
- bra return_a1
-
- curdir_err:
- lea.l $100(sp),sp
- bra drvname_err
-
-
- ** ** ** ** ** ** ** ** ** **
-
- p_filesnum:
- .dc.w str_val * filename
- .dc.w int_val * attrib
- .dc.w int_ret
- e_filesnum:
- lea.l filbuf(pc),a2
- move.w par2+8(sp),-(sp)
- move.l 2+par1+6(sp),-(sp)
- move.l a2,-(sp)
- DOS _FILES
- lea.l 10(sp),sp
- tst.l d0
- bmi return_zero * ファイルがない
- moveq #0,d1 * ファイル個数
- @@:
- addq.w #1,d1
- move.l a2,-(sp)
- DOS _NFILES
- addq.l #4,sp
- tst.l d0
- beq @b
- move.l d1,d0
- bra return_d0
-
-
-
- p_files:
- .dc.w str_val * name
- .dc.w int_val * attrib
- .dc.w $0038 * filenames (文字列型 1 次元配列)
- .dc.w ary1_i * filesizes
- .dc.w ary1_i * filedate×
- .dc.w ary1_c * fileattribs
- .dc.w int_ret
- e_files:
- lea.l filbuf(pc),a2
- move.w par2+8(sp),-(sp)
- move.l 2+par1+6(sp),-(sp)
- move.l a2,-(sp)
- DOS _FILES
- lea.l 10(sp),sp
- tst.l d0
- bmi return_zero * ファイルがない
-
- movea.l par3+6(sp),a3
- movea.l par4+6(sp),a4
- movea.l par5+6(sp),a5
- movea.l par6+6(sp),a6
- move.w 8(a3),d1 * 要素数
- cmp.w 8(a4),d1
- bne 要素数違う
- cmp.w 8(a5),d1
- bne 要素数違う
- cmp.w 8(a6),d1
- bne 要素数違う
- move.w 6(a3),d2 * str filenames() の各項のデータサイズ
- moveq #10,d0
- adda.l d0,a3
- adda.l d0,a4
- adda.l d0,a5
- adda.l d0,a6
-
- files_loop:
- lea.l 30(a2),a0 * filename
- movea.l a3,a1
- move.w d2,d0
- subq.w #1,d0
- @@:
- move.b (a0)+,(a1)+
- dbeq d0,@b
- clr.b (a1)
- lea.l (a3,d2.w),a3 * 次の項
-
- move.l 26(a2),(a4)+ * filesize
- move.l 22(a2),d0 * filedate&time
- swap d0
- move.l d0,(a5)+
- move.b 21(a2),(a6)+ * fileattrib
-
- move.l a2,-(sp)
- DOS _NFILES
- addq.l #4,sp
- tst.l d0
- dbne d1,files_loop
- bne return_zero
- moveq #1,d0 * 全ては格納出来なかった
- bra return_d0
-
-
- filbuf:
- .ds.b 56
-
-
- ** ** ** ** ** ** ** ** ** **
-
- p_setenv:
- .dc.w str_val
- .dc.w str_omt
- .dc.w int_ret
- p_getenv:
- .dc.w str_val
- .dc.w str_ret
- e_setenv:
- move.l par2+6(sp),a1
- tst.w par2(sp)
- bge @f
- suba.l a1,a1
- @@:
- move.l a1,-(sp)
- clr.l -(sp)
- move.l 8+par1+6(sp),-(sp)
- DOS _SETENV
- lea.l 12(sp),sp
- bra return_d0
- e_getenv:
- lea.l strbuf(pc),a1
- clr.b (a1)
- move.l a1,-(sp)
- clr.l -(sp)
- move.l 8+par1+6(sp),-(sp)
- DOS _GETENV
- lea.l 12(sp),sp
- bra return_a1
-
-
- ** ** ** ** ** ** ** ** ** **
-
- p_system:
- .dc.w str_val
- .dc.w int_ret
- e_system:
- movea.l par1+6(sp),a0
- lea.l -$200(sp),sp
- lea.l _command(pc),a1
- movea.l sp,a2
- @@:
- move.b (a1)+,(a2)+
- bne @b
- move.b #' ',-1(a2)
- @@:
- move.b (a0)+,(a2)+
- bne @b
-
- lea.l $100(sp),a1
- movea.l sp,a0
-
- clr.l -(sp)
- movem.l a0/a1,-(sp)
- move.w #2,-(sp)
- DOS _EXEC
- tst.l d0
- bmi @f
- clr.w (sp)
- DOS _EXEC
- @@:
- lea $200+14(sp),sp
- bra return_d0
-
-
- _command:
- .dc.b 'command.x',0
- .even
-
-
-
- *-------------------------
-
- return_zero:
- moveq.l #0,d0
- return_d0:
- lea.l fac(pc),a0
- move.l d0,6(a0)
- moveq.l #0,d0
- rts
- return_a1:
- lea.l fac(pc),a0
- move.l a1,6(a0)
- moveq.l #0,d0
- rts
-
- .even
- fac:
- .dc.w 0
- .dc.l 0
- .dc.l 0
- strbuf:
- .ds.b 256
- *-----------------------------
-
- 要素数違う:
- lea.l _要素数違う(pc),a1
- moveq #1,d0
- rts
- drvname_err:
- lea.l _drvname_err(pc),a1
- moveq #1,d0
- rts
- no_drvname:
- lea.l _no_drvname(pc),a1
- moveq #1,d0
- rts
- _drvname_err:
- .dc.b 'ドライブ名の指定が間違っています',0
- _no_drvname:
- .dc.b 'カレントを指定のドライブに変更することができませんでした',0
- _cant_chgdir:
- .dc.b 'カレントを指定のディレクトリに変更することができませんでした',0
- _要素数違う:
- .dc.b '指定の配列の要素数が相異なります',0
- .even
- .end
-
-
-